package mylab.starters.mybatis.support.datascope;

import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.statement.select.SelectItem;

import java.util.List;

/**
 * @Description:
 * @author: Sylar
 * @date: 2021年11月25日 2:27 下午
 */
public interface DataScopeHandler {

    /**
     * @param mappedStatementId Mybatis MappedStatement Id 根据该参数可以判断具体执行方法
     * @return
     */
    default boolean needDataScope(String mappedStatementId) {
        return true;
    }

    /**
     * 字段过滤
     *
     * @param mappedStatementId Mybatis MappedStatement Id 根据该参数可以判断具体执行方法
     * @param selectItems       原查询字段
     * @return 过滤后果的查询字段
     */
    default List<SelectItem> getSelectItems(String mappedStatementId, List<SelectItem> selectItems) {
        return selectItems;
    }

    /**
     * 行级数据过滤
     * 获取数据权限 SQL 片段
     *
     * @param mappedStatementId Mybatis MappedStatement Id 根据该参数可以判断具体执行方法
     * @param where             待执行 SQL Where 条件表达式
     * @return JSqlParser 条件表达式
     */
    Expression getSqlSegment(String mappedStatementId, Expression where);
}
